package com.wx.utils;

import com.wx.enums.RegexEnum;
import org.springframework.util.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <p>Title:      ValidateUtil. </p>
 * <p>Description 正则验证工具类 </p>
 * <p>Copyright: Copyright (c) 2016</p>
 * <p>Company:    医百科技有限公司 </p>
 *
 * @author         <a href="xinglinglove1029@163.com"/>杨文生</a>
 * @since      2020/12/30 14:38
 */
public class ValidateUtil {
    /**
     * 校验手机号码是否合法.
     *
     * @param mobile the handle
     * @return the boolean
     */
    public static boolean isMobileNumber(String mobile) {
        if (StringUtils.isEmpty(mobile)) {
            return false;
        }
        Pattern pattern = Pattern.compile(RegexEnum.PHONE.getReg());
        Matcher matcher = pattern.matcher(mobile);
        return matcher.matches();
    }


    /**
     * 方法名:isIdCardNum
     * 入参:[data]
     * 返回值类型:java.lang.Boolean
     * 方法描述: 校验18位身份证号
     */
    public static Boolean isIdCardNum(String data) {
        if (data == null) {
            return false;
        } else if (data.trim().length() <= 0) {
            return false;
        } else {
            return data.trim().matches(RegexEnum.ID_CARD.getReg());
        }
    }

    /**
     * 方法名:isNum
     * 入参:[data]
     * 返回值类型:java.lang.Boolean
     * 方法描述: 校验数字
     */
    public static Boolean isNum(String data) {
        if (data == null) {
            return false;
        } else if (data.trim().length() <= 0) {
            return false;
        } else {
            return data.trim().matches(RegexEnum.NUM.getReg());
        }
    }

    /**
     * 方法名:isEmail
     * 入参:[data]
     * 返回值类型:java.lang.Boolean
     * 方法描述: 校验邮箱
     */
    public static Boolean isEmail(String data) {
        if (data == null) {
            return false;
        } else if (data.trim().length() <= 0) {
            return false;
        } else {
            return data.trim().matches(RegexEnum.EMAIL.getReg());
        }
    }


    /**
     * 方法名:isChineseCharacter
     * 入参:[data]
     * 返回值类型:java.lang.Boolean
     * 方法描述: 校验中文
     */
    public static Boolean isChineseCharacter(String data) {
        if (data == null) {
            return false;
        } else if (data.trim().length() <= 0) {
            return false;
        } else {
            return data.trim().matches(RegexEnum.CHINESE_CHARACTER.getReg());
        }
    }

    /**
     * 校验是否为中文 英文 数字
     *
     * @param data String
     * @return Boolean
     */
    public static Boolean isChineseOrEnglishOrNumber(String data) {
        if (data == null) {
            return false;
        } else if (data.trim().length() <= 0) {
            return false;
        } else {
            return data.trim().matches(RegexEnum.CHINESE_ENGLISH_NUM.getReg());
        }
    }

    /**
     * 判断字符串是否为Long类型
     *
     * @param str String
     * @return boolean
     */
    public static boolean isDigit(String str) {
        if (null == str || str.length() == 0) {
            return false;
        }

        for (int i = str.length(); --i >= 0; ) {
            int c = str.charAt(i);
            if (c < 48 || c > 57) {
                return false;
            }
        }
        return true;
    }

    /**
     * 是否包含小写字母
     * @param str String
     * @return boolean
     */
    public static boolean isContainAz(String str) {
        return !str.matches(".*[^a-z].*");
    }

    /**
     * 是否是web地址
     * @param url String
     * @return boolean
     */
    public static boolean isHttpUrl(String url) {
        if (StringUtils.isEmpty(url)) {
            return false;
        }
        Pattern pattern = Pattern.compile(RegexEnum.HTTP_URL.getReg());
        Matcher matcher = pattern.matcher(url);
        return matcher.matches();
    }
}
